home *** CD-ROM | disk | FTP | other *** search
Wrap
//------------------------------------------------------------------------------ // // ADOBE SYSTEMS INCORPORATED // Copyright 2004 Adobe Systems Incorporated // All Rights Reserved // // NOTICE: Adobe permits you to use, modify, and distribute // this file in accordance with the terms of the Adobe license // agreement accompanying it. If you have received this file // from a source other than Adobe, then your use, modification, // or distribution of it requires the prior written permission // of Adobe. // // $LastChangedRevision: 160 $ //------------------------------------------------------------------------------ // some "constants" COLUMNMINWIDTH = 220; // globals selectedSessionRow = null; selectedSessionID = 0; shortlist = true; shortlimit = 7; selectedrss = false; // parts of this function may need to change for different localizations function localizeDate(mydate) { // 9/29/04, 7:58:14 PM var month = mydate.getMonth()+1; // get month var day = mydate.getDate()+1; // get day var year = mydate.getFullYear().toString().substr(-2); // get year var hour = mydate.getHours(); // get hour var min = mydate.getMinutes(); // get min var sec = mydate.getSeconds(); // get sec // wrap hour and get AM/PM var ampm = 'AM'; if (hour > 12) { hour = hour%=12; ampm = 'PM'; } // set return string, this is the part tha will need to change var output = month + '/' + day + '/' + year + ', ' + hour + ':' + min + ' '+ampm; return output; } function writeRecentFolders() { var output = ''; var item = false; var l = (shortlist) ? shortlimit:recentfolders.length; l = (l<recentfolders.length) ? l:recentfolders.length; for (var i=0; i<l; i++) { item = recentfolders[i]; if (item.numitems == null) item.numitems=''; output += '<tr onclick="location.href=\'' + item.url + '\'">'; output += '<td class="thumbnail"><div>'+item.numitems+'</div><\/td>'; output += '<td><h3><a href="' + item.url + '">' + unescape(item.name) + '<\/a><\/h3>'; output += unescape(item.path); output += '<br />'; output += item.date; output += '</td>'; output += '<\/tr>'; } document.getElementById('recentfolders').getElementsByTagName("table")[0].innerHTML = output; } function writeRecentFiles() { var output = ''; var item = false; var l = (shortlist) ? shortlimit:recentfiles.length; l = (l<recentfiles.length) ? l:recentfiles.length; for (var i=0; i<l; i++) { item = recentfiles[i]; // skip empties if (item.name == '') continue; // skip if no thumbanail w and h if (isNaN(item.width) || isNaN(item.height)) { item.width = 35; item.height = 35; } // calc w and h if (item.width > item.height) { var w = 45; var h = Math.round(item.height / (item.width/45)); } else if (item.height > item.width) { var h = 45; var w = Math.round(item.width / (item.height/45)); } else { var h = 45; var w = 45; } output += '<tr>'; output += '<td class="thumbnail" onclick="location.href=\'' + item.url + '\'"><img src="' + item.thumbnail + '" alt="" width="' + w + '" height="' + h + '" \/><\/td>'; output += '<td onclick="location.href=\'' + item.url + '\'"><h3><a href="' + item.url + '">' + unescape(item.name) + '<\/a><\/h3>'; output += item.date; output += '<\/td>'; output += '<td class="reveal" onclick="location.href=\'' + item.revealurl + '\'"><img src="_media/shell.png" width="19" height="25" alt="Click to Reveal" \/><\/td><\/tr>'; } document.getElementById('recentfiles').getElementsByTagName("table")[0].innerHTML = output; } function writeSessions() { var output = ''; var item = false; for (var i=0; i<sessions.length; i++) { item = sessions[i]; output += '<tr onclick="selectSession('+i+', this)">'; output += '<td class="thumbnail"><div>'+item.totalitems+'</div><\/td><td class="info">'; output += '<h3>' + item.name + '<\/h3>'; output += localizeDate(item.date); output += '<\/td><\/tr>'; } document.getElementById('groupscontenttable').innerHTML = output; } function selectSession(index, element) { // restore current row if it's set if (selectedSessionRow) selectedSessionRow.style.backgroundColor = "transparent"; // set color for the row element.style.backgroundColor = "#CDE086"; // show launch icon document.getElementById('launch').style.visibility = "visible"; // display close button document.getElementById('deselect').style.visibility = "visible"; // hide blurb and off text document.getElementById('groupcontrols').style.visibility = "hidden"; document.getElementById('groupoff').style.display = "none"; // display information for this session document.getElementById('groupon').style.display = "block"; // display delete button document.getElementById('groupremove').style.display = "block"; // get information for the session var me = sessions[index]; var tabledata = ''; // add photoshop if (me.photoshop.length) { tabledata = "<tr><td class='num'>"+me.photoshop.length+"</td><td>Photoshop File"; tabledata += (me.photoshop.length >= 2) ? "s":""; tabledata += "</td></tr>"; } // add illustrator if (me.illustrator.length) { tabledata += "<tr><td class='num'>"+me.illustrator.length+"</td><td>Illustrator File"; tabledata += (me.illustrator.length > 1) ? "s":""; tabledata += "</td></tr>"; } // add indesign if (me.indesign.length) { tabledata += "<tr><td class='num'>"+me.indesign.length+"</td><td>InDesign File"; tabledata += (me.indesign.length > 1) ? "s":""; tabledata += "</td></tr>"; } // add golive if (me.golive.length) { tabledata += "<tr><td class='num'>"+me.golive.length+"</td><td>GoLive File"; tabledata += (me.golive.length > 1) ? "s":""; tabledata += "</td></tr>"; } document.getElementById('groupon').getElementsByTagName("table")[0].innerHTML = tabledata; // set global for selected row selectedSessionRow = element; selectedSessionID = index; // add rollout // document.getElementById('groups').onmouseout = deselectSession; } function deselectSession() { var inside = elementContains(document.getElementById('groups'), window.event.toElement); // skip events inside the table if(inside) return; // restore current row if it's set if (selectedSessionRow) selectedSessionRow.style.backgroundColor = "transparent"; // hide launch icon document.getElementById('launch').style.visibility = "hidden"; // hide close button document.getElementById('deselect').style.visibility = "hidden"; // show blurb and off text document.getElementById('groupcontrols').style.visibility = "visible"; document.getElementById('groupoff').style.display = "block"; // hide information for this session document.getElementById('groupon').style.display = "none"; // hide delete button document.getElementById('groupremove').style.display = "none"; // set global for selected row selectedSessionRow = false; selectedSessionID = false; // remove rollout delete(document.getElementById('groups').onmouseout); } function openSession() { call('openSession', selectedSessionID); } function removeSession() { call('removeSession', selectedSessionID); deselectSession(); } function sortRecentFoldersBy(prop, caller) { if (recentfolders.sortby == prop) { recentfolders.reverse(); } else { recentfolders.sortby = prop; recentfolders.sort(sortOn); } writeRecentFolders(); // reset sort method indicator var nav = document.getElementById('recentfolders').getElementsByTagName('div')[0].getElementsByTagName('a'); for (var i=0; i<nav.length; i++) { nav[i].style.textDecoration = 'none'; } caller.style.textDecoration = "underline"; } function sortRecentFilesBy(prop, caller) { if (recentfiles.sortby == prop) { recentfiles.reverse(); } else { recentfiles.sortby = prop; recentfiles.sort(sortOn); } writeRecentFiles(); // reset sort method indicator var nav = document.getElementById('recentfiles').getElementsByTagName('div')[0].getElementsByTagName('a'); for (var i=0; i<nav.length; i++) { nav[i].style.textDecoration = 'none'; } caller.style.textDecoration = "underline"; } /** * Sorts an array of objects on prop defined in the sortby prop of the array */ function sortOn(a, b) { a = a[this.sortby].toLowerCase(); b = b[this.sortby].toLowerCase(); if (a > b) { return 1; } if (a < b) { return -1; } return 0; } /** * FUNCTIONS FOR SESSIONS */ // save a session of the currently open documents in all CS apps function saveSession() { var session = eval(call('getSessionData')); } function loadSessions() { sessions = eval(call('loadSessions')); // convert dates to objects for (var i in sessions) { sessions[i].date = new Date(sessions[i].date); } } /************* * TIPS **************/ // non-repeating random number object. use myVar = new NrRnd(size) // where size is one more than the highest possible return value (so one can create with .length) function NrRnd(size) { this.top = size; this.l = size; this.src = new Array(); for (var i=0; i<size; i++) { this.src[i] = i; } } NrRnd.prototype.getNum = function () { if (this.l == 0) { for (var i=0; i<this.top; i++) { this.src[i] = i; } this.l = this.top; } var r = Math.floor(Math.random() * this.l); var picked = this.src[r]; this.src.splice(r,1); this.l--; return picked; } function initTips() { // join cstips and dvatips arrays if dvatips is defined cstips.concat(dvatips); tiprnd = new NrRnd(cstips.length); nextTip(); } function writeTip(n) { document.getElementById('maintip').innerHTML = cstips[n]; } function lastTip() { if (tippos > 1) tippos--; var n = tiphistory[tippos-1]; writeTip(n); } function nextTip() { var n; // if we are at the end show a new tip, otherwise go forward in hist if (tiphistory.length == 0 || tippos == tiphistory.length) { n = tiprnd.getNum(); tiphistory[tiphistory.length] = n; } else { n = tiphistory[tippos]; } tippos++; writeTip(n); } /** * update display of column title depending on col size * currently un-used until bridge is fixed */ function setColumnTitleForSize() { var sessions = document.getElementById('groups'); if (sessions.clientWidth < COLUMNMINWIDTH) { // icon only sessions.getElementsByTagName("h2")[0].className = 'short'; } else { // full sessions.getElementsByTagName("h2")[0].className = 'full'; } var folders = document.getElementById('recentfolders'); if (folders.clientWidth < COLUMNMINWIDTH) { // icon only folders.getElementsByTagName("h2")[0].className = 'short'; } else { // full folders.getElementsByTagName("h2")[0].className = 'full'; } var files = document.getElementById('recentfiles'); if (files.clientWidth < COLUMNMINWIDTH) { // icon only files.getElementsByTagName("h2")[0].className = 'short'; } else { // full files.getElementsByTagName("h2")[0].className = 'full'; } } // ------------------------------------------------------------ // RSS // ------------------------------------------------------------ function writeRSSLoader() { var rssrefresh = call('loadRefresh'); var rsslist = ''; if (rssfeeds.length > 0) rsslist = '&location=' + escape(rssfeeds); var output = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="30" height="30" align="middle">'; output += '<embed src="_media/rssloader.swf?refresh='+rssrefresh+rsslist+'" quality="high" wmode="transparent" bgcolor="#e4e4e4" width="10" height="10" name="rssloadermovie" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />'; output += '<\/object>'; document.getElementById('rssloader').innerHTML = output; // clear channels document.getElementById('rsschannels').innerHTML = ''; } function addRSSChannel(id, title, description, link, url, items) { items = eval(items); id = rssdata.length; rssdata[id] = { title: title, description: description, url: url, link: link, items: items } // display the item var channels = document.getElementById('rsschannels'); var dt = document.createElement('dt'); // var dttext = document.createTextNode(title); // dt.appendChild(dttext); dt.innerHTML = title; dt.id = id; // see if it's an adobe default, which can't be removed var isadobe = false; for (var i=0; i<BC_RSS_DEFAULT_FEEDS.length; i++) { if (url == BC_RSS_DEFAULT_FEEDS[i]) { isadobe = true; break; } } if (isadobe) { dt.onclick = function() { displayRSSChannel(this,id); } dt.className = 'adobe'; } else { dt.onclick = function() { displayRSSChannel(this,id); } } var dd = document.createElement('dd'); var ddtext = document.createTextNode('('+items.length+')'); dd.appendChild(ddtext); channels.appendChild(dt); channels.appendChild(dd); // show first feed displayRSSChannel(dt, id); } function displayRSSChannel(element, id) { if (selectedrss) selectedrss.style.backgroundColor = 'transparent'; element.style.backgroundColor = '#CAB097'; selectedrss = element; // if an adobe feed, hide remove button if (element.className == 'adobe') { disableRSSRemove(); } else { enableRSSRemove(); } var items = rssdata[id].items; var rssitems = document.getElementById('rssitems'); rssitems.innerHTML = ''; var dd, dt, ddtext, dttext, item; for (var i=0; items.length; i++) { item = eval(items[i]) dt = document.createElement('dt'); dt.onclick = function () {rss_toggle(this)} dt.innerHTML = item[0]; dd = document.createElement('dd'); // take out images dd.innerHTML = item[1].replace(/<img[^>]*>/,'') // add link dd.innerHTML += ' <a href="external:'+item[2]+'">More...</a>'; rssitems.appendChild(dt); rssitems.appendChild(dd); } } // disables remove button for default feeds; function disableRSSRemove() { document.getElementById('rssremovelink').style.display = 'none'; } // enables remove button for default feeds; function enableRSSRemove() { document.getElementById('rssremovelink').style.display = 'inline'; } // dhtml controls ------ function rss_toggle(element) { var story = element.nextSibling; if (story.style.display == 'none' || story.style.display == ''){ story.style.display = 'block'; element.className = 'open'; } else { story.style.display = 'none'; element.className = 'closed'; } } function toggleRSSandTips() { try { var rsstipsrow = document.getElementById('rsstipsrow'); var offset = 160; // if it's closed, open it up. if (rsstipsrow.className == 'closed'){ rsstipsrow.className = 'open'; document.getElementById('togglelf').className = 'open'; document.getElementById('togglert').className = 'open'; // change height of top elements document.getElementById('groups').className = 'section'; document.getElementById('recentfolders').className = 'section'; document.getElementById('recentfiles').className = 'section'; // close it } else { rsstipsrow.className = 'closed'; document.getElementById('togglelf').className = 'closed'; document.getElementById('togglert').className = 'closed'; // change height of top elements document.getElementById('groups').className = 'section long'; document.getElementById('recentfolders').className = 'section long'; document.getElementById('recentfiles').className = 'section long'; } // toggle shortlist shortlist = !shortlist; // and redraw top cols writeSessions(); writeRecentFiles(); writeRecentFolders(); writeRSSLoader(); // save the state call('setRSSToggleState', rsstipsrow.className); } catch (e) { alert(e); } } // extend script hooks ------ function addRSSFeed() { var url = prompt('Type the URL for the new RSS feed', 'http://'); if (url == '' || !url) return; call('addRSSFeed', url); } function removeRSSFeed() { var url = rssdata[selectedrss.id].url; if (url == '' || !url) return; call('removeRSSFeed', url); } function RSSerror(url) { // load list of sites to skip the prompt on var skip = call('getSkipRSSKill'); skip = skip.split(' '); skip = skip.concat(BC_RSS_DEFAULT_FEEDS); for (var i=0; i<skip.length; i++) { if (url == skip[i]) return; } var kill = confirm('The site '+url+' cannot be displayed by this RSS reader: The site is either not supported by this reader, a non-RSS site, or there may be a problem with your internet connection. Permanently remove from your list of sites?'); if (kill) { call('removeRSSFeed', url); } else { call('setSkipRSSKill', url); } } function setRefresh() { var t = call('loadRefresh'); if (t == '') t = 4; var time = prompt('Enter refresh interval, in hours:', t); if (time == undefined) return; time = parseInt(time); while (isNaN(time)) { time = prompt('You must enter a number, in hours:', t); if (time == undefined) return; } if (time < .5) time = .5; call('setRefresh', time); reloadRSS(); } function loadRSSFeeds() { var feeds = call('loadRSSFeeds'); // split out adobe feeds from user feeds var s = feeds.split(' '); BC_RSS_DEFAULT_FEEDS = s[0].split(' '); rssfeeds = s[0]+' '+s[1]; } function reloadRSS() { loadRSSFeeds(); writeRSSLoader(); } // ------------------------------------------------------------ /** * on load setup sessions and get number of items in recent folders **/ window.onload = function() { recentfolders = []; recentfiles = []; // parse recent folders var recentNodes = document.getElementById('recentfolderdata').getElementsByTagName('p'); var folder; for (var i=0; i<recentNodes.length; i++) { folder = recentNodes[i].getElementsByTagName('span'); // skip empties if (unescape(folder[0].innerHTML) == '') continue; recentfolders.push( { order: i, name: truncateName(unescape(folder[0].innerHTML), 20), path: truncatePath(folder[1].innerHTML), url: (folder[2].innerHTML), date: (folder[3].innerHTML), alt: (folder[4].innerHTML), numitems: call('getFileCountForDirectory', (folder[1].innerHTML)) } ); } // parse recent files recentNodes = document.getElementById('recentfiledata').getElementsByTagName('p'); var file; for (var i=0; i<recentNodes.length;i++) { file = recentNodes[i].getElementsByTagName('span'); // skip empties if (unescape(file[6].innerHTML) == '') continue; recentfiles.push( { order: i, url: (file[0].innerHTML), date: (file[1].innerHTML), alttext: (file[2].innerHTML), thumbnail: call('checkForThumbnail', file[3].innerHTML), application: (file[4].innerHTML), kind: (file[5].innerHTML), name: truncateName(file[6].innerHTML, 25), revealurl: (file[7].innerHTML), height: parseInt(file[8].innerHTML), width: parseInt(file[9].innerHTML) } ); } // get session info loadSessions(); // show everything writeRecentFolders(); writeRecentFiles(); writeSessions(); // tips tiphistory = []; tippos = 0; initTips(); // get rss info rssdata = []; loadRSSFeeds(); writeRSSLoader(); // make sure it's visible if (call('getRSSToggleState') == 'closed') toggleRSSandTips(); setColumnTitleForSize(); } window.onresize = setColumnTitleForSize; // ------------------------------------------------ // utilities /** * returns true if elmOuter contains elmInner */ function elementContains(elmOuter, elmInner) { while (elmInner && elmInner != elmOuter) { elmInner = elmInner.parentNode; } if (elmInner == elmOuter) { return true; } return false; } /** * truncates file paths */ function truncatePath(path) { var maxlen = 25; if (path == '' || path == undefined) return ''; if (path.length <= maxlen) return path; // if there is a scheme, return '' var pat = /^[^:]*:\/\//; if(pat.test(path)) return ''; var os = (navigator.userAgent.toLowerCase().indexOf('mac') >= 0) ? 'mac':'win'; if (os == 'mac') { var delim = '/'; } else { var delim = '\\'; } if (path.indexOf(delim) < 0) return path; var parts = path.split(delim); // grab last element of path var name = parts[parts.length-2]; // fix really long names if (name.length > maxlen) name = truncateName(name, 8); var newpath = '...'+delim+name+delim; // now loop through first path element and add as much as you can until you hit the max length var i = 0; var pathhead = delim; while((pathhead.length + newpath.length) < maxlen) { pathhead += parts[1].charAt(i); i++; if (i==parts[1].length) { pathhead += delim; break; } } return pathhead + newpath; } function truncateName(name, newlen) { if (name.length < newlen) return name; // find the extension var extension = ''; if (name.indexOf('.') > -1) { extension = name.substring(name.lastIndexOf('.')); newlen -= extension.length; } return name.substring(0, newlen)+'...'+extension; }